home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / xsdl19990506 / XSDLReader.class (.txt) < prev   
Encoding:
Java Class File  |  2000-06-30  |  16.6 KB  |  681 lines

  1. package com.extensibility.xml.xsdl19990506;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.xml.AttributeDeclaration;
  5. import com.extensibility.xml.AttributeGroupMember;
  6. import com.extensibility.xml.BaseDeclaration;
  7. import com.extensibility.xml.Comment;
  8. import com.extensibility.xml.ContentModel;
  9. import com.extensibility.xml.ContentModelTerm;
  10. import com.extensibility.xml.DTDUtilities;
  11. import com.extensibility.xml.ElementDeclaration;
  12. import com.extensibility.xml.ExternalGEDeclaration;
  13. import com.extensibility.xml.ExternalPEDeclaration;
  14. import com.extensibility.xml.InternalGEDeclaration;
  15. import com.extensibility.xml.InternalPEDeclaration;
  16. import com.extensibility.xml.NamespaceDeclaration;
  17. import com.extensibility.xml.NotationDeclaration;
  18. import com.extensibility.xml.ParserException;
  19. import com.extensibility.xml.ProcessingInstruction;
  20. import com.extensibility.xml.SchemaIntf;
  21. import com.extensibility.xml.SchemaUtilities;
  22. import com.extensibility.xml.TypeRef;
  23. import com.extensibility.xml.URI;
  24. import com.extensibility.xml.dt.DataType;
  25. import com.extensibility.xml.dt.DataTypeFactory;
  26. import com.extensibility.xml.dt.DataTypeIntf;
  27. import java.io.File;
  28. import java.io.FileNotFoundException;
  29. import java.io.IOException;
  30. import java.io.Reader;
  31. import java.net.MalformedURLException;
  32. import java.net.URL;
  33. import java.net.UnknownHostException;
  34. import java.util.Hashtable;
  35. import java.util.Stack;
  36. import java.util.Vector;
  37. import org.xml.sax.AttributeList;
  38. import org.xml.sax.HandlerBase;
  39. import org.xml.sax.InputSource;
  40. import org.xml.sax.Locator;
  41. import org.xml.sax.Parser;
  42. import org.xml.sax.SAXException;
  43. import org.xml.sax.SAXParseException;
  44. import org.xml.sax.helpers.LocatorImpl;
  45.  
  46. public final class XSDLReader extends HandlerBase {
  47.    static final String TOPLEVEL_ELEMTYPE = "elementType";
  48.    static final String TOPLEVEL_ATTRTYPE = "attrDecl";
  49.    static final String TOPLEVEL_IMPORT = "import";
  50.    static final String TOPLEVEL_DATATYPE = "datatype";
  51.    static final String TOPLEVEL_INCLUDE = "include";
  52.    static final String TOPLEVEL_MODELGROUP = "modelGroup";
  53.    static final String TOPLEVEL_ATTRGROUP = "attrGroup";
  54.    static final String TOPLEVEL_IGETYPE = "textEntity";
  55.    static final String TOPLEVEL_NOTATION = "notation";
  56.    static final String TOPLEVEL_UNPARSEDENTITY = "unparsedEntity";
  57.    static final String TOPLEVEL_EXTERNALENTITY = "externalEntity";
  58.    static final String TAG_ELEMENT = "elementTypeRef";
  59.    static final String TAG_COMMENT = "comment";
  60.    static final String TAG_CM = "model";
  61.    static final String TAG_CM_SEQ = "sequence";
  62.    static final String TAG_CM_CHOICE = "choice";
  63.    static final String TAG_CM_EMPTY = "empty";
  64.    static final String TAG_CM_ANY = "any";
  65.    static final String TAG_CM_MIXED = "mixed";
  66.    static final String TAG_CM_PCDATA = "string";
  67.    static final String TAG_ATTR_ENUMERATION = "enumeration";
  68.    static final String TAG_ATTR_OPTION = "literal";
  69.    static final String TAG_ATTR_REQUIRED = "required";
  70.    static final String TAG_ATTR_FIXED = "fixed";
  71.    static final String TAG_ATTR_DEFAULT = "default";
  72.    static final String TAG_NS_PREFIX = "schemaAbbrev";
  73.    static final String TAG_NS_URI = "schemaName";
  74.    static final String TAG_DATATYPE = "datatypeRef";
  75.    static final String TAG_MODELGROUPREF = "modelGroupRef";
  76.    static final String TAG_ATTRGROUPREF = "attrGroupRef";
  77.    private Hashtable elemDecls;
  78.    private Hashtable currentAttrs;
  79.    private ElementDeclaration currentElemDecl;
  80.    private AttributeDeclaration currentAttrDecl;
  81.    private Vector attrChoices;
  82.    private Vector elemDeclAttrs;
  83.    private Hashtable namespaces;
  84.    private SchemaIntf schema;
  85.    private ContentModel currentCM;
  86.    private boolean isFirstLevelCM;
  87.    private boolean cmClosed;
  88.    private Stack cmConnectors;
  89.    private Stack contentModels;
  90.    private Object commentKind;
  91.    private String commentContent;
  92.    private boolean commentStart;
  93.    private boolean optionStart;
  94.    private boolean defaultStart;
  95.    private String defaultContent;
  96.    private boolean fixedStart;
  97.    private String fixedContent;
  98.    private boolean igeStart;
  99.    private String igeValue;
  100.    private String igeName;
  101.    private Stack currentContentIPEs;
  102.    private Stack currentAttrIPEs;
  103.    private InternalPEDeclaration currentIPEDecl;
  104.    private Hashtable currentIPEs;
  105.    private NotationDeclaration currentNotationDecl;
  106.    private ExternalGEDeclaration currentXGEDecl;
  107.    private Locator locator;
  108.  
  109.    public XSDLReader(SchemaIntf var1) {
  110.       this.schema = var1;
  111.    }
  112.  
  113.    public void error(String var1, int var2, int var3, int var4) {
  114.       ParserException var5 = new ParserException(var2, var1);
  115.       var5.setSource(String.valueOf(String.valueOf(String.valueOf(String.valueOf("See Line: ").concat(String.valueOf(var3))).concat(String.valueOf(" Column:"))).concat(String.valueOf(var4))).concat(String.valueOf(" in file.")));
  116.       var5.setSourceLinePos(var3);
  117.       this.schema.addError(var5);
  118.    }
  119.  
  120.    public void error(SAXParseException var1) {
  121.       this.error(((SAXException)var1).getMessage(), 240, this.locator.getLineNumber(), this.locator.getColumnNumber());
  122.    }
  123.  
  124.    public void fatalError(SAXParseException var1) {
  125.       this.error(var1);
  126.    }
  127.  
  128.    public void setDocumentLocator(Locator var1) {
  129.       this.locator = var1;
  130.    }
  131.  
  132.    public void parse(URI var1) throws IOException {
  133.       Reader var3 = null;
  134.  
  135.       try {
  136.          Parser var2 = SchemaUtilities.getParser();
  137.          this.setDocumentLocator(new LocatorImpl());
  138.          var2.setEntityResolver(this);
  139.          var2.setErrorHandler(this);
  140.          var2.setDocumentHandler(this);
  141.          var3 = var1.createReader();
  142.          var2.parse(new InputSource(var3));
  143.       } catch (IOException var15) {
  144.          throw var15;
  145.       } catch (Exception var16) {
  146.          if (!(var16 instanceof IOException)) {
  147.          }
  148.       } finally {
  149.          try {
  150.             if (var3 != null) {
  151.                var3.close();
  152.             }
  153.          } catch (IOException var14) {
  154.          }
  155.  
  156.       }
  157.  
  158.    }
  159.  
  160.    public void startDocument() {
  161.       this.elemDecls = new Hashtable();
  162.       this.currentAttrs = new Hashtable();
  163.       this.currentElemDecl = null;
  164.       this.currentAttrDecl = null;
  165.       this.attrChoices = new Vector();
  166.       this.elemDeclAttrs = new Vector();
  167.       this.namespaces = new Hashtable();
  168.       this.isFirstLevelCM = true;
  169.       this.cmClosed = true;
  170.       this.cmConnectors = new Stack();
  171.       this.contentModels = new Stack();
  172.       this.commentKind = null;
  173.       this.commentContent = null;
  174.       this.commentStart = false;
  175.       this.optionStart = false;
  176.       this.fixedStart = false;
  177.       this.defaultStart = false;
  178.       this.fixedContent = null;
  179.       this.defaultContent = null;
  180.       this.igeStart = false;
  181.       this.igeValue = null;
  182.       this.igeName = null;
  183.       this.currentContentIPEs = new Stack();
  184.       this.currentAttrIPEs = new Stack();
  185.       this.currentIPEs = new Hashtable();
  186.    }
  187.  
  188.    public void endDocument() {
  189.    }
  190.  
  191.    public void processingInstruction(String var1, String var2) throws SAXException {
  192.       ProcessingInstruction var3 = new ProcessingInstruction(var1, var2);
  193.       this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  194.    }
  195.  
  196.    private char getCurrentConnection() {
  197.       return (Character)this.cmConnectors.peek();
  198.    }
  199.  
  200.    private ContentModelTerm getCurrentParent() {
  201.       return (ContentModelTerm)this.contentModels.peek();
  202.    }
  203.  
  204.    public void startElement(String var1, AttributeList var2) {
  205.       this.parseElement(var1, var2);
  206.    }
  207.  
  208.    public void parseElement(String var1, AttributeList var2) {
  209.       if (var1.equals("schema")) {
  210.          String var3 = var2.getValue("name");
  211.          String var4 = var2.getValue("version");
  212.          String var5 = var2.getValue("xmlns");
  213.       } else if (var1.equals("import")) {
  214.          String var17 = var2.getValue("schemaAbbrev");
  215.          if (var17 == null) {
  216.             var17 = new String("");
  217.          }
  218.  
  219.          String var32 = var2.getValue("schemaName");
  220.          if (var32.indexOf("www.w3.org/1999/05/06-xmlschema-1") >= 0) {
  221.             return;
  222.          }
  223.  
  224.          NamespaceDeclaration var44 = new NamespaceDeclaration(var17, var32);
  225.          this.schema.insertDeclaration(var44, (BaseDeclaration)null);
  226.          this.namespaces.put(var32, var17);
  227.       } else if (var1.equals("include")) {
  228.          String var18 = var2.getValue("schemaName");
  229.          URI var33;
  230.          if (var18.startsWith("http://")) {
  231.             try {
  232.                var33 = new URI(new URL(var18));
  233.             } catch (MalformedURLException var16) {
  234.                Debug.assert(false, String.valueOf(var18).concat(String.valueOf(" is a malformed url")));
  235.                var33 = new URI(new File(var18));
  236.             }
  237.          } else {
  238.             var33 = new URI(new File(var18));
  239.          }
  240.  
  241.          String var45 = DTDUtilities.makeValidName(var33.getShortName());
  242.          if (this.schema.getNamedDeclaration(var45, Class.forName("com.extensibility.xml.ParameterEntityDeclaration")) != null) {
  243.             Debug.assert(false, String.valueOf(String.valueOf("The name ").concat(String.valueOf(var45))).concat(String.valueOf(" already exists.")));
  244.             return;
  245.          }
  246.  
  247.          ExternalPEDeclaration var6 = new ExternalPEDeclaration(var45, (String)null, var33);
  248.          this.schema.insertDeclaration(var6, (BaseDeclaration)null);
  249.  
  250.          try {
  251.             int var7 = this.schema.insertSubset(var6);
  252.             if (var7 > 0) {
  253.                this.error(((BaseDeclaration)var6).getName(), 246, this.locator.getLineNumber(), this.locator.getColumnNumber());
  254.             }
  255.          } catch (UnknownHostException var13) {
  256.             this.error(var33.getFullName(), 245, this.locator.getLineNumber(), this.locator.getColumnNumber());
  257.          } catch (FileNotFoundException var14) {
  258.             this.error(var33.getShortName(), 244, this.locator.getLineNumber(), this.locator.getColumnNumber());
  259.          } catch (IOException var15) {
  260.             this.error(((Throwable)var15).getMessage(), 247, this.locator.getLineNumber(), this.locator.getColumnNumber());
  261.          }
  262.       } else if (var1.equals("elementType")) {
  263.          String var19 = var2.getValue("name");
  264.          String var34 = var2.getValue("model");
  265.          if (this.elemDecls.containsKey(var19)) {
  266.             this.currentElemDecl = (ElementDeclaration)this.elemDecls.get(var19);
  267.          } else {
  268.             this.currentElemDecl = new ElementDeclaration(var19, 3);
  269.             this.elemDecls.put(var19, this.currentElemDecl);
  270.          }
  271.  
  272.          for(int var46 = 0; var46 < var2.getLength(); ++var46) {
  273.             String var56 = var2.getName(var46);
  274.             if (var56.indexOf(":") != -1) {
  275.                String var65 = var2.getValue(var46);
  276.                this.currentElemDecl.putMetaProp(var56, var65);
  277.             }
  278.          }
  279.  
  280.          this.currentCM = this.currentElemDecl.getContentModel();
  281.          if (var34 != null && var34.equals("open")) {
  282.             this.currentCM.setOpen(true);
  283.          } else {
  284.             this.currentCM.setOpen(false);
  285.          }
  286.  
  287.          this.currentCM.setContentModel(6);
  288.          this.cmClosed = false;
  289.          this.isFirstLevelCM = true;
  290.          this.cmConnectors.push(new Character(','));
  291.          this.contentModels.push(this.currentCM.getRootGroup());
  292.       } else if (var1.equals("attrDecl")) {
  293.          String var20 = var2.getValue("name");
  294.          String var35 = var2.getValue("required");
  295.          DataType var47 = DataTypeFactory.createDataType(1);
  296.          boolean var57 = false;
  297.          if (var35 != null && var35.equals("true")) {
  298.             var57 = true;
  299.          }
  300.  
  301.          this.currentAttrDecl = new AttributeDeclaration(this.currentElemDecl, var20, var47, (Vector)null, var57, (String)null);
  302.          this.currentAttrs.put(var20, this.currentAttrDecl);
  303.          if (!this.currentAttrIPEs.isEmpty()) {
  304.             ((InternalPEDeclaration)this.currentAttrIPEs.peek()).add(this.currentAttrDecl);
  305.          } else if (this.currentElemDecl != null) {
  306.             this.elemDeclAttrs.addElement(this.currentAttrDecl);
  307.          }
  308.  
  309.          for(int var66 = 0; var66 < var2.getLength(); ++var66) {
  310.             String var8 = var2.getName(var66);
  311.             if (var8.indexOf(":") != -1) {
  312.                String var9 = var2.getValue(var66);
  313.                this.currentAttrDecl.putMetaProp(var8, var9);
  314.             }
  315.          }
  316.       } else if (var1.equals("datatypeRef")) {
  317.          DataType var21 = this.convertDataType(var2.getValue("name"));
  318.          String var36 = var2.getValue("schemaAbbrev");
  319.          String var48 = var2.getValue("schemaName");
  320.          if (var48 != null) {
  321.             if (!this.namespaces.containsKey(new URI((URI)null, var48))) {
  322.                this.error(var48, 238, this.locator.getLineNumber(), this.locator.getColumnNumber());
  323.             }
  324.          } else if (var36 != null && !this.namespaces.contains(var36)) {
  325.             this.error(var36, 238, this.locator.getLineNumber(), this.locator.getColumnNumber());
  326.          }
  327.  
  328.          if (this.currentAttrDecl != null) {
  329.             this.currentAttrDecl.setDataType(var21);
  330.          } else if (this.currentElemDecl != null) {
  331.             this.currentCM.setContentModel(5);
  332.             this.currentElemDecl.setDataType(var21);
  333.          }
  334.       } else if (var1.equals("enumeration")) {
  335.          String var22 = var2.getValue("schemaAbbrev");
  336.          if (var22 != null && !this.namespaces.contains(var22)) {
  337.             this.error(var22, 238, this.locator.getLineNumber(), this.locator.getColumnNumber());
  338.          }
  339.  
  340.          this.currentAttrDecl.setDataType(DataTypeFactory.createDataType(10));
  341.       } else if (var1.equals("literal")) {
  342.          this.optionStart = true;
  343.       } else if (var1.equals("default")) {
  344.          this.defaultContent = null;
  345.          this.defaultStart = true;
  346.       } else if (var1.equals("fixed")) {
  347.          this.fixedContent = null;
  348.          this.fixedStart = true;
  349.       } else if (var1.equals("empty")) {
  350.          this.currentCM.setContentModel(3);
  351.          this.cmClosed = true;
  352.       } else if (var1.equals("any")) {
  353.          this.currentCM.setContentModel(2);
  354.          this.cmClosed = true;
  355.       } else if (!var1.equals("sequence") && !var1.equals("choice")) {
  356.          if (var1.equals("mixed")) {
  357.             this.currentCM.setContentModel(4);
  358.          } else if (var1.equals("elementTypeRef")) {
  359.             String var24 = var2.getValue("schemaAbbrev");
  360.             String var38 = var2.getValue("schemaName");
  361.             String var50 = var2.getValue("name");
  362.             String var59 = var2.getValue("minOccur");
  363.             String var67 = var2.getValue("maxOccur");
  364.             char var72 = this.getOccurance(var59, var67);
  365.             if (var24 != null) {
  366.                if (!this.namespaces.contains(var24)) {
  367.                   this.error(String.valueOf(String.valueOf(var50).concat(String.valueOf(", "))).concat(String.valueOf(var24)), 242, this.locator.getLineNumber(), this.locator.getColumnNumber());
  368.                }
  369.             } else if (!var50.equals("#PCDATA")) {
  370.                if (this.elemDecls.containsKey(var50)) {
  371.                   ElementDeclaration var74 = (ElementDeclaration)this.elemDecls.get(var50);
  372.                } else {
  373.                   ElementDeclaration var75 = new ElementDeclaration(var50, 3);
  374.                   this.elemDecls.put(var50, var75);
  375.                }
  376.             }
  377.  
  378.             char var10 = this.getCurrentConnection();
  379.             ContentModelTerm var11 = this.getCurrentParent();
  380.             String var12;
  381.             if (var24 != null && var24.length() != 0) {
  382.                var12 = String.valueOf(String.valueOf(var24).concat(String.valueOf(":"))).concat(String.valueOf(var50));
  383.             } else {
  384.                var12 = var50;
  385.             }
  386.  
  387.             var11.addTerm(new ContentModelTerm(new TypeRef(var12), var72, var10));
  388.          } else if (var1.equals("comment")) {
  389.             this.commentStart = true;
  390.          } else if (var1.equals("textEntity")) {
  391.             this.igeName = var2.getValue("name");
  392.             this.igeStart = true;
  393.          } else if (var1.equals("notation")) {
  394.             String var25 = var2.getValue("name");
  395.             String var39 = var2.getValue("public");
  396.             String var51 = var2.getValue("system");
  397.             NotationDeclaration var60 = new NotationDeclaration(var25, var39, new URI((URI)null, var51));
  398.             this.schema.insertDeclaration(var60, (BaseDeclaration)null);
  399.             this.currentIPEDecl = null;
  400.             this.currentNotationDecl = var60;
  401.             this.currentXGEDecl = null;
  402.          } else if (var1.equals("unparsedEntity")) {
  403.             String var26 = var2.getValue("name");
  404.             String var40 = var2.getValue("public");
  405.             String var52 = var2.getValue("system");
  406.             String var61 = var2.getValue("notation");
  407.             ExternalGEDeclaration var68 = new ExternalGEDeclaration(var1, var40, new URI((URI)null, var52), var61);
  408.             this.schema.insertDeclaration(var68, (BaseDeclaration)null);
  409.             this.currentIPEDecl = null;
  410.             this.currentNotationDecl = null;
  411.             this.currentXGEDecl = var68;
  412.          } else if (var1.equals("externalEntity")) {
  413.             String var27 = var2.getValue("name");
  414.             String var41 = var2.getValue("public");
  415.             String var53 = var2.getValue("system");
  416.             String var62 = var2.getValue("notation");
  417.             ExternalGEDeclaration var69 = new ExternalGEDeclaration(var1, var41, new URI((URI)null, var53));
  418.             this.schema.insertDeclaration(var69, (BaseDeclaration)null);
  419.             this.currentIPEDecl = null;
  420.             this.currentNotationDecl = null;
  421.             this.currentXGEDecl = var69;
  422.          } else if (var1.equals("modelGroup")) {
  423.             String var28 = var2.getValue("name");
  424.             this.currentIPEDecl = new InternalPEDeclaration(var28, Class.forName("com.extensibility.xml.ContentModelTerm"));
  425.             this.currentContentIPEs.push(this.currentIPEDecl);
  426.             this.currentIPEs.put(var28, this.currentIPEDecl);
  427.             this.currentCM = this.currentIPEDecl.createContentModel();
  428.             this.currentCM.setContentModel(6);
  429.             this.cmClosed = false;
  430.             this.isFirstLevelCM = true;
  431.             this.cmConnectors.push(new Character(','));
  432.             this.contentModels.push(this.currentCM.getRootGroup());
  433.          } else if (var1.equals("attrGroup")) {
  434.             String var29 = var2.getValue("name");
  435.             this.currentIPEDecl = new InternalPEDeclaration(var29, Class.forName("com.extensibility.xml.AttributeGroup"));
  436.             this.currentAttrIPEs.push(this.currentIPEDecl);
  437.             this.currentIPEs.put(var29, this.currentIPEDecl);
  438.          } else if (var1.equals("modelGroupRef")) {
  439.             String var30 = var2.getValue("schemaAbbrev");
  440.             String var42 = var2.getValue("schemaName");
  441.             String var54 = var2.getValue("name");
  442.             String var63 = var2.getValue("minOccur");
  443.             String var70 = var2.getValue("maxOccur");
  444.             char var73 = this.getOccurance(var63, var70);
  445.             if (var30 != null) {
  446.                if (!this.namespaces.contains(var30)) {
  447.                   this.error(String.valueOf(String.valueOf(var54).concat(String.valueOf(", "))).concat(String.valueOf(var30)), 248, this.locator.getLineNumber(), this.locator.getColumnNumber());
  448.                }
  449.             } else if (this.currentIPEs.containsKey(var54)) {
  450.                InternalPEDeclaration var76 = (InternalPEDeclaration)this.currentIPEs.get(var54);
  451.             }
  452.  
  453.             char var77 = this.getCurrentConnection();
  454.             ContentModelTerm var78 = this.getCurrentParent();
  455.             String var79;
  456.             if (var30 != null && var30.length() != 0) {
  457.                var79 = String.valueOf(String.valueOf(String.valueOf("%").concat(String.valueOf(var30))).concat(String.valueOf(":"))).concat(String.valueOf(var54));
  458.             } else {
  459.                var79 = String.valueOf("%").concat(String.valueOf(var54));
  460.             }
  461.  
  462.             var78.addTerm(new ContentModelTerm(new TypeRef(var79), var73, var77));
  463.          } else if (var1.equals("attrGroupRef")) {
  464.             String var31 = var2.getValue("name");
  465.             String var43 = var2.getValue("schemaAbbrev");
  466.             String var55 = var2.getValue("schemaName");
  467.             if (var43 != null) {
  468.                if (!this.namespaces.contains(var43)) {
  469.                   this.error(String.valueOf(String.valueOf(var31).concat(String.valueOf(", "))).concat(String.valueOf(var43)), 249, this.locator.getLineNumber(), this.locator.getColumnNumber());
  470.                }
  471.             } else if (this.currentIPEs.containsKey(var31)) {
  472.                InternalPEDeclaration var64 = (InternalPEDeclaration)this.currentIPEs.get(var31);
  473.                if (!this.currentAttrIPEs.isEmpty()) {
  474.                   ((InternalPEDeclaration)this.currentAttrIPEs.peek()).add((AttributeGroupMember)var64);
  475.                } else if (this.currentElemDecl != null) {
  476.                   this.currentElemDecl.add(var64.getAttributeGroup());
  477.                }
  478.             }
  479.          } else {
  480.             this.error(var1, 239, this.locator.getLineNumber(), this.locator.getColumnNumber());
  481.          }
  482.       } else {
  483.          char var23;
  484.          if (var1.equals("sequence")) {
  485.             var23 = ',';
  486.          } else {
  487.             var23 = '|';
  488.          }
  489.  
  490.          if (this.isFirstLevelCM) {
  491.             this.cmConnectors.pop();
  492.             this.cmConnectors.push(new Character(var23));
  493.             this.isFirstLevelCM = false;
  494.          } else {
  495.             String var37 = var2.getValue("minOccur");
  496.             String var49 = var2.getValue("maxOccur");
  497.             char var58 = this.getOccurance(var37, var49);
  498.             ContentModelTerm var71 = new ContentModelTerm();
  499.             var71.setOccurance(var58);
  500.             var71.setConnection(this.getCurrentConnection());
  501.             this.getCurrentParent().addTerm(var71);
  502.             this.contentModels.push(var71);
  503.             this.cmConnectors.push(new Character(var23));
  504.          }
  505.       }
  506.  
  507.    }
  508.  
  509.    public void endElement(String var1) {
  510.       if (var1.equals("elementType")) {
  511.          this.schema.insertDeclaration(this.currentElemDecl, (BaseDeclaration)null);
  512.          this.currentElemDecl = null;
  513.  
  514.          for(int var2 = 0; var2 < this.elemDeclAttrs.size(); ++var2) {
  515.             AttributeDeclaration var3 = (AttributeDeclaration)this.elemDeclAttrs.elementAt(var2);
  516.             this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  517.          }
  518.  
  519.          this.elemDeclAttrs.removeAllElements();
  520.          this.currentAttrs.clear();
  521.          if (!this.contentModels.empty()) {
  522.             this.contentModels.removeAllElements();
  523.          }
  524.  
  525.          if (!this.cmConnectors.empty()) {
  526.             this.cmConnectors.removeAllElements();
  527.          }
  528.  
  529.          this.cmClosed = true;
  530.          this.isFirstLevelCM = false;
  531.       } else if (var1.equals("model")) {
  532.          this.cmClosed = true;
  533.       } else if (!var1.equals("sequence") && !var1.equals("choice")) {
  534.          if (var1.equals("comment")) {
  535.             this.commentStart = false;
  536.             if (this.currentAttrDecl != null) {
  537.                this.currentAttrDecl.addComment(new Comment(this.commentContent));
  538.             } else if (this.currentElemDecl != null) {
  539.                this.currentElemDecl.addComment(new Comment(this.commentContent));
  540.             } else if (this.currentIPEDecl != null) {
  541.                this.currentIPEDecl.addComment(new Comment(this.commentContent));
  542.             } else if (this.currentNotationDecl != null) {
  543.                this.currentNotationDecl.addComment(new Comment(this.commentContent));
  544.             } else if (this.currentXGEDecl != null) {
  545.                this.currentXGEDecl.addComment(new Comment(this.commentContent));
  546.             } else {
  547.                Debug.assert(false, "cannot add comment if it doesn't belong to any element declaration");
  548.             }
  549.  
  550.             this.commentKind = null;
  551.             this.commentContent = null;
  552.          } else if (var1.equals("attrDecl")) {
  553.             this.currentAttrDecl = null;
  554.             this.attrChoices.removeAllElements();
  555.          } else if (var1.equals("enumeration")) {
  556.             Vector var5 = new Vector();
  557.  
  558.             for(int var8 = 0; var8 < this.attrChoices.size(); ++var8) {
  559.                var5.addElement(this.attrChoices.elementAt(var8));
  560.             }
  561.  
  562.             this.currentAttrDecl.setChoices(var5);
  563.          } else if (var1.equals("literal")) {
  564.             this.optionStart = false;
  565.          } else if (var1.equals("fixed")) {
  566.             this.currentAttrDecl.setDefault(this.fixedContent);
  567.             this.fixedStart = false;
  568.          } else if (var1.equals("default")) {
  569.             this.currentAttrDecl.setDefault(this.defaultContent);
  570.             this.defaultStart = false;
  571.          } else if (var1.equals("textEntity")) {
  572.             InternalGEDeclaration var6 = new InternalGEDeclaration(this.igeName, this.igeValue);
  573.             this.schema.insertDeclaration(var6, (BaseDeclaration)null);
  574.             this.igeStart = false;
  575.             this.igeName = null;
  576.             this.igeValue = null;
  577.          } else if (var1.equals("modelGroup")) {
  578.             InternalPEDeclaration var7 = (InternalPEDeclaration)this.currentContentIPEs.pop();
  579.             var7.updateValue();
  580.             this.schema.insertDeclaration(var7, (BaseDeclaration)null);
  581.             if (!this.currentContentIPEs.isEmpty()) {
  582.                this.currentIPEDecl = (InternalPEDeclaration)this.currentContentIPEs.peek();
  583.             }
  584.  
  585.             if (!this.contentModels.empty()) {
  586.                this.contentModels.removeAllElements();
  587.             }
  588.  
  589.             if (!this.cmConnectors.empty()) {
  590.                this.cmConnectors.removeAllElements();
  591.             }
  592.  
  593.             this.cmClosed = true;
  594.             this.isFirstLevelCM = false;
  595.          } else if (var1.equals("attrGroup")) {
  596.             this.schema.insertDeclaration((InternalPEDeclaration)this.currentAttrIPEs.pop(), (BaseDeclaration)null);
  597.          }
  598.       } else {
  599.          if (this.cmConnectors.size() > 1) {
  600.             this.cmConnectors.pop();
  601.          }
  602.  
  603.          if (this.contentModels.size() > 1) {
  604.             ContentModelTerm var4 = (ContentModelTerm)this.contentModels.pop();
  605.          }
  606.       }
  607.  
  608.    }
  609.  
  610.    public void characters(char[] var1, int var2, int var3) throws SAXException {
  611.       if (this.commentStart) {
  612.          this.commentContent = String.valueOf(var1, var2, var3);
  613.       } else if (this.optionStart) {
  614.          this.attrChoices.addElement(new String(String.valueOf(var1, var2, var3)));
  615.       } else if (this.fixedStart) {
  616.          this.fixedContent = String.valueOf(var1, var2, var3);
  617.       } else if (this.defaultStart) {
  618.          this.defaultContent = String.valueOf(var1, var2, var3);
  619.       } else if (this.igeStart) {
  620.          this.igeValue = String.valueOf(var1, var2, var3);
  621.       } else {
  622.          String var4 = new String(String.valueOf(var1, var2, var3).trim());
  623.          if (var4.length() > 0) {
  624.             this.error(var4, 239, this.locator.getLineNumber(), this.locator.getColumnNumber());
  625.          }
  626.       }
  627.  
  628.    }
  629.  
  630.    private DataType convertDataType(String var1) {
  631.       String var2 = DataTypeIntf.STRING;
  632.       if (var1 != null && var1.equals("binary")) {
  633.          var2 = DataTypeIntf.BINHEX;
  634.       }
  635.  
  636.       if (var1.equals("integer")) {
  637.          var2 = DataTypeIntf.INT;
  638.       } else if (var1.equals("decimal")) {
  639.          var2 = DataTypeIntf.DECIMAL;
  640.       } else if (var1.equals("real")) {
  641.          var2 = DataTypeIntf.FLOAT;
  642.       } else if (var1.equals("date")) {
  643.          var2 = DataTypeIntf.DATE;
  644.       } else if (var1.equals("time")) {
  645.          var2 = DataTypeIntf.TIME;
  646.       } else if (var1.equals("timePeriod")) {
  647.          var2 = DataTypeIntf.INTERVAL;
  648.       } else if (DataTypeFactory.isPrimitive(DataTypeFactory.createDataType(var1)) || var1.equals(DataTypeIntf.STRING) || var1.equals(DataTypeIntf.BOOLEAN) || var1.equals(DataTypeIntf.NUMBER) || var1.equals(DataTypeIntf.DATETIME) || var1.equals(DataTypeIntf.URI)) {
  649.          var2 = var1;
  650.       }
  651.  
  652.       return DataTypeFactory.createDataType(var2);
  653.    }
  654.  
  655.    protected char getOccurance(Object var1, Object var2) {
  656.       char var3 = '\u0000';
  657.       var3 = '\u0000';
  658.       if (var1 == null) {
  659.          var1 = new String("1");
  660.       }
  661.  
  662.       if (var2 == null) {
  663.          var2 = new String("1");
  664.       }
  665.  
  666.       if (((String)var1).equals("1") && ((String)var2).equals("1")) {
  667.          var3 = '\u0000';
  668.       } else if (((String)var1).equals("0") && ((String)var2).equals("1")) {
  669.          var3 = '?';
  670.       } else if (((String)var1).equals("0") && ((String)var2).equals("*")) {
  671.          var3 = '*';
  672.       } else if (((String)var1).equals("1") && ((String)var2).equals("*")) {
  673.          var3 = '+';
  674.       } else {
  675.          Debug.assert(false, String.valueOf(String.valueOf(String.valueOf(String.valueOf("minOccur=").concat(String.valueOf((String)var1))).concat(String.valueOf(", maxOccur="))).concat(String.valueOf((String)var2))).concat(String.valueOf(" not implemented yet!")));
  676.       }
  677.  
  678.       return var3;
  679.    }
  680. }
  681.